class Solution {//leetcode207——课程表
public:
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        int n=prerequisites.size();
        unordered_map<int,vector<int>> edges;
        vector<int> in(numCourses);
        //建表
        for(int i=0;i<n;i++){
            int a=prerequisites[i][0];
            int b=prerequisites[i][1];
            edges[b].push_back(a);
            in[a]++;
        }
        //拓扑排序
        queue<int> q;
        for(int i=0;i<numCourses;i++){
            if(in[i]==0){
                q.push(i);
            }
        }
        //bfs
        while(q.size()){
            int i=q.front();
            for(auto e:edges[i]){
                in[e]--;
                if(in[e]==0) q.push(e);
            }
            q.pop();
        }

        for(auto e:in){
            if(e>0) return false;
        }
        return true;
    }
};